A given host device may be configured to support multiple processes that share access to a common memory. For example, host devices may be configured to utilize operating system level virtualization techniques such as Linux containers with each such container corresponding to a different process. These and other processes of a given host device may share memory for any of a number of different reasons, such as to facilitate implementation of functionality associated with pipelining, fast inter-process communication, resource throttling and many others. In typical conventional practice, a Linux control group (“cgroup”) tracks kernel memory usage for shared memory via a page-level “first touch” principal in which the first process that brings a new page into a shared memory region is charged at page-in for that particular page. Any and all charges relating to the particular page are automatically assessed to the first process, even though one or more other processes later map to the shared memory region that includes the page. Such an arrangement fails to accurately reflect actual usage of the shared memory region by the various processes. This can result in some processes being overcharged, and possibly experiencing more frequent crashes due to out-of-memory conditions, while other processes are undercharged or assessed no charges at all.